# 定义目标架构
ARCH		?= x86
TARGET		= main

# 中间文件路径
BUILD_DIR 	= build_$(ARCH)
# 源文件存放文件夹
SRC_DIR		= source
# 头文件存放文件夹
INC_DIR		= include	


# $(subst <from>, <to>, <text>) 将字符串<text>中<from>内容替换为<to>

# $(patsubst <pattern>, <replacement>, <text>)和上面一样但是多了"%"

# $(dir <names...>) 提取目录，如$(dir <src/a.c>) 返回/src

# $(notdir <names...>) 提取文件名，如$(dir <src/a.c>) 返回a.c

# $(foreach <var>, <list>, <text>) 把参数<list>中的单词逐一取出，然后再执行<text>所包含的表达式，每次<text>都会返回一个字符串，循环的过程中，<text> 中所包含的每一个字符都会以空格隔开，当整个循环结束，<text>所返回的每一个字符串所组成的整个字符串将会是函数foreach函数返回值

# 源文件
SRCS = $(wildcard source/*.c)
# 目标文件
OBJS = $(patsubst %.c, $(BUILD_DIR)/%.o, $(notdir $(SRCS)))
# 头文件
DEFS = $(wildcard include/*.h)

# 指定头文件路径
CFLAGS	= $(patsubst %, -I%, $(INC_DIR)) -std=c11

# 编译器选择
ifeq ($(ARCH), x86)
CC		= gcc
else
CC		= arm-linux-gnueabihf-gcc
endif

$(BUILD_DIR)/$(TARGET): $(OBJS) 
	$(CC) -o $@  $^ $(CFLAGS)

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(DEPS)
	$(CC)  -c -o $@ $< $(CFLAGS)

.PHONY: clean
clean:
	rm -rf build_x86/main build_x86/*.o
	rm -rf build_arm/main build_arm/*.o
